<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>InitPHP框架 PHP框架 - A PHP Framework - 拦截器</title>
<link href="static/common.css" type="text/css" rel="stylesheet" />
<meta name="keywords" content="php框架，国产php框架, initphp框架，MVC，分层体系" />
<meta name="description" content="initphp框架是一款国产php框架。initphp框架主要基于MVC模式，具备代码清晰，操作简单，功能齐全，开发快速，高效安全等特点，是您选择php框架的首选。" />
</head>
<body>
<div class="header">
  <div class="header_nav">InitPHP (A PHP Framework) 用户手册</div>
  <div class="header_div">
    <div class="header_title">第3章 3.6 拦截器</div>
    <div class="header_right"><a href="3_5.htm">上一页</a> <a href="3_7.htm">下一页</a> </div>
  </div>
</div>
<div class="title">关于拦截器：</div>
<ul>
  <li>拦截器是在框架运行前以及业务处理完毕后进行拦截</li>
  <li>拦截器可以用来处理权限，业务控制，访问日志等工作</li>
  <li>拦截器分为preHandle 前置拦截器和postHandle 后置拦截器</li>
</ul>
<div class="title">拦截器的配置文件：</div>
<ul>
  <li>$InitPHP_conf['interceptor']['path'] 是配置你的拦截器存放的文件夹目录</li>
  <li>$InitPHP_conf['interceptor']['postfix'] 拦截器文件和类的后缀名，例如testInterceptor.php</li>
  <li>$InitPHP_conf['interceptor']['rule'] 是拦截器规则，是一个数组形式，可以定义多个拦截器</li>
  <li>'file' 是拦截器的名称，例如testInterceptor.php，则名称为test</li>
  <li>regular 是访问规则，如果都是*号则拦截所有的请求。如果需要拦截部分请求，可以通过正则的方式来配置。例如'c' => '/^(hello|test)$/' 则只能拦截请求中c参数为hello或者test的请求。</li>
</ul>
<pre id="PHP" class="prettyprint">
/*********************************拦截器配置*****************************************/
/**
 * 拦截器配置
 * rule是拦截器的配置规则，是一个数组的形式。
 * 你可以定义多个拦截器。
 */
$InitPHP_conf['interceptor']['path'] = "web/interceptor"; //拦截器文件夹目录
$InitPHP_conf['interceptor']['postfix'] = "Interceptor"; //拦截器类和文件的后缀名
$InitPHP_conf['interceptor']['rule'] = array( //拦截器规则
	'test' => array(
		'file' => 'test', //文件名称 例如：testInterceptor,则file值为：test
		'regular' =>  array(
			'm' => '*', 
			'c' => '*', 
			'a' => '*'
		)//正则表达式
	)
);
</pre>

<div class="title">具体实现：</div>
<ul>
  <li>需要实现接口类interceptorInterface 中的preHandle和postHandle两个方法</li>
</ul>
<pre id="PHP" class="prettyprint">
class testInterceptor implements interceptorInterface {

	/**
	 * 前置拦截器，在所有Action运行全会进行拦截
	 * 如果返回true，则拦截通过;如果返回false，则拦截
	 * @return boolean 返回布尔类型，如果返回false，则截断
	 */
	public function preHandle() {
		echo "preHandle";
		return true;
	}

	/**
	 * 后置拦截器，在所有操作进行完毕之后进行拦截
	 */
	public function postHandle() {
		echo "postHandle";
	}

}
</pre>



<div class="footer">版权所有：<a href="">http://initphp.com</a> InitPHP (A PHP Framework) By @Aliyun_zhuli</div>
<script src="static/jquery.js" type="text/javascript"></script>
<link href="static/prettify/prettify.css" rel="stylesheet" type="text/css">
<script src="static/prettify/prettify.js" type="text/javascript"></script>
<script type="text/javascript" src="static/comm.js"></script>
</body>
</html>
